﻿#define _CRT_SECURE_NO_WARNINGS 1
#include <iostream>
using namespace std;

//电话号码
//https://www.nowcoder.com/questionTerminal/ceb89f19187b4de3997d9cdef2d551e8
//int main() {
//    int n = 0;
//    unordered_map<char, char> table;
//    table['A'] = '2';
//    table['B'] = '2';
//    table['C'] = '2';
//    table['D'] = '3';
//    table['E'] = '3';
//    table['F'] = '3';
//    table['G'] = '4';
//    table['H'] = '4';
//    table['I'] = '4';
//    table['J'] = '5';
//    table['K'] = '5';
//    table['L'] = '5';
//    table['M'] = '6';
//    table['N'] = '6';
//    table['O'] = '6';
//    table['P'] = '7';
//    table['Q'] = '7';
//    table['R'] = '7';
//    table['S'] = '7';
//    table['T'] = '8';
//    table['U'] = '8';
//    table['V'] = '8';
//    table['W'] = '9';
//    table['X'] = '9';
//    table['Y'] = '9';
//    table['Z'] = '9';
//
//    while (cin >> n) {
//        set<string> ss;
//        while (n--)
//        {
//            string str;
//            string tmp;
//            tmp.reserve(str.size());
//            cin >> str;
//            for (const auto& ch : str)
//            {
//                if (ch >= 'A' && ch <= 'Z')
//                    tmp.push_back(table[ch]);
//                else if (ch >= '0' && ch <= '9')
//                    tmp.push_back(ch);
//
//                if (tmp.size() == 3)
//                    tmp.push_back('-');
//            }
//            ss.insert(tmp);
//        }
//        for (const auto& s : ss)
//            cout << s << endl;
//        cout << endl;
//    }
//}

//求和
//https://www.nowcoder.com/questionTerminal/11cc498832db489786f8a03c3b67d02c
//int n = 0; //查找组合数范围
//int m = 0; //查找数
//vector<int> v;
//
//void DFS(int num, int sum) //当前数 当前数和
//{
//    if (sum > m) return; //如果当前sum和大于查找的数m则该数num不符合要求 剪枝
//    else if (sum == m) //如果当前的num插入后正好组成m 则开始打印符合条件的组成数
//    {
//        for (const auto& x : v) cout << x << " ";
//        cout << endl;
//    }
//    else //sum<m 还需要继续凑数
//    {
//        for (int i = num; i <= n; ++i) //i从本次num开始继续++
//        {
//            v.push_back(i);
//            DFS(i + 1, sum + i); //本次遍历从i+1开始 sum加上当前push的数检验是否符合要求
//            v.pop_back(); //无论符合还是不符合 出来一律弹出 继续查找其他可凑的数
//        }
//    }
//
//}
//
//int main() {
//
//    while (cin >> n >> m) {
//        DFS(1, 0);
//    }
//    return 0;
//}
